home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / tparray.zip / ARRAY.PAS < prev   
Pascal/Delphi Source File  |  1993-01-04  |  2KB  |  90 lines

  1. (*  From:  Randy Forgaard, CIS Borland SIG  
  2.  
  3. These two short programs allow array sizes to be defined dynamically
  4. as your program runs.  These are programs for demonstration purposes.
  5. To incorporate either into your program, just convert it to a
  6. procedure.
  7.  
  8. *) 
  9.  
  10.   program KnownSize;
  11.   type
  12.     Element = Integer;
  13.     ElemArr = array [1..32767] of Element;
  14.     ElemArrPtr = ^ElemArr;
  15.   var
  16.     a: ElemArrPtr;
  17.     size, i: Integer;
  18.   begin
  19.  
  20.     {Get array size}
  21.     write('How many elements? ');
  22.     readln(size);
  23.     GetMem(a, size * SizeOf(Element));
  24.  
  25.     {Fill the array}
  26.     writeln('Please input the elements --');
  27.     for i := 1 to size do
  28.       begin
  29.         write('Value ', i, ': ');
  30.         readln(a^[i])
  31.       end;
  32.  
  33.     {Output the array}
  34.     writeln;
  35.     writeln('The elements are --');
  36.     for i := 1 to size do
  37.       writeln('Value ', i, ': ', a^[i])
  38.   end.
  39.  
  40. Sometimes, you won't know the eventual size of the array before you
  41. starting building the array.  Like, if you are reading a directory, you
  42. don't know how many entries are in the directory until you get to the
  43. last one.  For these applications, a linked list often works best.
  44. Here's a simple example:
  45.  
  46. *)
  47.  
  48.   program VariableSize;
  49.  
  50.   type
  51.     ElemType = Integer;
  52.     List = ^Element;
  53.     Element = record
  54.                 elem: ElemType;
  55.                 next: List
  56.               end;
  57.   var
  58.     start, current: List;
  59.     e: ElemType;
  60.  
  61.   begin
  62.  
  63.     {Build list}
  64.     New(start);
  65.     current := start;
  66.     repeat
  67.       write('Next integer (0 will be last element): ');
  68.       readln(e);
  69.       if e <> 0 then
  70.         begin
  71.           current^.elem := e;
  72.           New(current^.next);
  73.           current := current^.next
  74.         end
  75.     until e = 0;
  76.     current^.next := nil;
  77.  
  78.     {Output list}
  79.     writeln;
  80.     writeln('The list:');
  81.     current := start;
  82.     while current <> nil do
  83.       begin
  84.         writeln(current^.elem);
  85.         current := current^.next
  86.       end
  87.   end.
  88.  
  89.  
  90.